import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import {
  platformLogin,
  schoolLogin,
  studentLogin,
  userLogin
} from '../api/login/login.js'
import { ElMessage } from 'element-plus' // 假设使用 Element Plus 的消息提示

/**
 * 登录状态管理 store
 * 使用 Pinia 管理用户的登录状态、用户信息和登录逻辑
 */
export const useLoginStore = defineStore('login', () => {
  // 状态定义
  const token = ref(localStorage.getItem('token') || '') // 从本地存储初始化
  const user = reactive({
    name: '',
    avatar: '',
    role: ''
  })
  const loginLoading = ref(false) // 登录加载状态

  /**
   * 根据登录类型获取对应的登录 API 方法
   * @param {string} loginType - 登录类型，可选值为 'platform'、'school'、'student'、'user'
   * @returns {Function} 对应的登录 API 方法
   */
  const getLoginApi = (loginType) => {
    const apiMap = {
      platform: platformLogin,
      school: schoolLogin,
      student: studentLogin,
      user: userLogin
    }
    return apiMap[loginType]
  }

  /**
   * 执行登录操作
   * @param {Object} loginForm - 登录表单数据，包含登录类型和其他登录所需字段
   * @returns {Promise} 登录结果的 Promise 对象
   */
  const postLogin = async (loginForm) => {
      console.log("stores接收到的表单数据：",loginForm);
    try {
      loginLoading.value = true

      // 根据登录类型获取对应API
      const loginApi = getLoginApi(loginForm.loginType)

      // 调用登录接口
      const res = await loginApi(loginForm)

      if (res.code === 200) {
        // 登录成功处理
        token.value = res.data.token
        Object.assign(user, res.data.userInfo)
        console.log(res.value);

        // 持久化存储
        localStorage.setItem('token', token.value)
        localStorage.setItem('userInfo', JSON.stringify(user))

        ElMessage.success('登录成功')
        return Promise.resolve(res)
      } else {
        throw new Error(res.message || '登录失败')
      }
    } catch (error) {
      // 错误处理
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      token.value = ''
      Object.keys(user).forEach(key => user[key] = '')

      ElMessage.error(error.message)
      return Promise.reject(error)
    } finally {
      loginLoading.value = false
    }
  }

  /**
   * 用户登出操作
   * 清除用户信息和本地存储的登录数据
   */
  const logout = () => {
    token.value = ''
    Object.keys(user).forEach(key => user[key] = '')
    localStorage.removeItem('token')
    localStorage.removeItem('userInfo')
  }

  /**
   * 初始化用户信息
   * 从本地存储中读取用户信息并更新到响应式对象中
   */
  const initUser = () => {
    const storedUser = localStorage.getItem('userInfo')
    if (storedUser) {
      Object.assign(user, JSON.parse(storedUser))
    }
  }

  // 立即执行初始化
  initUser()

  return {
    token,
    user,
    loginLoading,
    postLogin,
    logout
  }
})
